<?php

/**
  *------------------------------------------
  * Обновление Explay CMS с версии 2.0 до 2.1
  *------------------------------------------
  */
 
define ('EXPLAY',1);
include 'header.php';

 
include $_SERVER['DOCUMENT_ROOT'].'/engine/settings.php';

/**
  * Переводим БД в UTF-8
  */
  
$mysqlconnect = mysql_connect ($server, $dbusername, $dbpassword);
if (!$mysqlconnect) {
	print '<p style="color:red">Невозможно подключиться к серверу БД. Проверьте настройки <em>engine/settings.php</em>!</p>';
	include 'footer.php';
	exit;
}
			
$mysqlselect = mysql_select_db ($dbname, $mysqlconnect);
if (!$mysqlselect) {
	print '<p style="color:red">Невозможно подключиться базе данных. Проверьте настройки <em>engine/settings.php</em>!</p>';
	include 'footer.php';
	exit;
}

mysql_query("/*!40101 SET NAMES 'cp1251' */");

$UTF = "ALTER TABLE expl_admin_cp CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_art_category CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_articles CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_blacklist CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_blocks CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_blogs_users CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_comments CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_feedback CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_friends CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_menu CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_messages CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_modules CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_panels CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_plugins CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_sessions CONVERT TO CHARACTER SET 'utf8';
ALTER TABLE expl_users CONVERT TO CHARACTER SET 'utf8'";

$UTF = explode (';', $UTF);
foreach ($UTF as $q) {
	mysql_query ($q);
}
$message = array ();

$message[] = 'Обновлена кодировка БД';

mysql_close ();

/**
  * Основные обновления
  */

$mysqlconnect = mysql_connect ($server, $dbusername, $dbpassword);
if (!$mysqlconnect) {
	print '<p style="color:red">Невозможно подключиться к серверу БД. Проверьте настройки <em>engine/settings.php</em>!</p>';
	include 'footer.php';
	exit;
}
			
$mysqlselect = mysql_select_db ($dbname, $mysqlconnect);
if (!$mysqlselect) {
	print '<p style="color:red">Невозможно подключиться базе данных. Проверьте настройки <em>engine/settings.php</em>!</p>';
	include 'footer.php';
	exit;
}

mysql_query("/*!40101 SET NAMES 'utf8' */");

/**
  * Обновление друзей: создаем новую таблицу, перемещаем туда все связи, удаляем соостветсвующие поля втаблице пользователей
  */

mysql_query ("
	CREATE TABLE ".DB_PEREFIX."_friends (
		user INT(6) NOT NULL,
		friend INT(6) NOT NULL,
		PRIMARY KEY (user, friend)
	) TYPE=MyISAM DEFAULT CHARSET=utf8
");

$get_users = mysql_query ("SELECT user_id, user_friends FROM ".DB_PEREFIX."_users");

$i=0;
$c=0;

while (list($id, $friends) = mysql_fetch_row ($get_users)) {
	
	$friends = explode (',', $friends);
	
	foreach ($friends as $f) {
		if ($f != '') {
			mysql_query ("INSERT INTO ".DB_PEREFIX."_friends VALUES ($id, ".trim($f).")");
			++$c;
		}
	}
	
	++$i;
	
}

$message[] = 'Обновление друзей: обработано '.$i.' пользователей и добавлено '.$c.' дружеских записи!';



/**
  * Обновление читатейлей блогов: создаем новую таблицу и закидываем туда связи пользователь-блог, удаляем поля
  */

mysql_query ("
	CREATE TABLE ".DB_PEREFIX."_blogs_users (
		user INT(6) NOT NULL,
		blog INT(6) NOT NULL,
		PRIMARY KEY (user, blog)
	) TYPE=MyISAM DEFAULT CHARSET=utf8");

$get_blogs = mysql_query ("SELECT user_id, user_blogs FROM ".DB_PEREFIX."_users");

$count_queries = 0;
$count_users = 0;

while (list($uid, $blogs) = mysql_fetch_row ($get_blogs)) {
	$blogs = explode (',', $blogs);
	
	foreach ($blogs as $b) {
		$b = trim ($b);
		
		if ($b != '' && $b != 0)
			if (mysql_query ("INSERT INTO ".DB_PEREFIX."_blogs_users VALUES ($uid, $b)"))
				++$count_queries;
		
	}
	++$count_users;
}

$message[] = "Обновление блогов: обработано $count_users пользователей и добавлено $count_queries записей в БД!";

if (   mysql_query ("ALTER TABLE ".DB_PEREFIX."_art_category DROP cat_users")
	&& mysql_query ("ALTER TABLE ".DB_PEREFIX."_art_category ADD cat_voters VARCHAR (500) AFTER cat_rating"))
			$message[] = 'Обновление блогов: таблица блогов обновлена';


/**
  * Много обновлений таблиц
  */


if (   mysql_query ("ALTER TABLE ".DB_PEREFIX."_users DROP user_friends")
	&& mysql_query ("ALTER TABLE ".DB_PEREFIX."_users DROP user_blogs")
	&& mysql_query ("ALTER TABLE ".DB_PEREFIX."_users DROP user_avatar")
	
	&& mysql_query ("ALTER TABLE ".DB_PEREFIX."_users ADD lastvisit INT(32) AFTER voters") //
	
	&& mysql_query ("ALTER TABLE expl_users CHANGE user_name user_name VARCHAR( 64 ) NOT NULL")
	&& mysql_query ("ALTER TABLE ".DB_PEREFIX."_users ADD INDEX (user_id, user_name)")
	
	&& mysql_query ("ALTER TABLE ".DB_PEREFIX."_users ADD gender ENUM ('0', '1', '2') NOT NULL DEFAULT '0' AFTER lastvisit")
	&& mysql_query ("ALTER TABLE ".DB_PEREFIX."_users ADD birthdate INT (16) AFTER gender"))
			$message[] = 'Обновление пользователей: таблица пользователей обновлена';

if (mysql_query ("ALTER TABLE expl_articles CHANGE art_rating art_rating INT(4) NULL DEFAULT '0'"))
		$message[] = 'Статьи обновлены';
		

/**
  * Удаляем таблицу настроек сайта и создаем пхп-файл с этими же настройками
  */		
 
$SITE = mysql_fetch_array (mysql_query ("SELECT * FROM  site_main"));
	
$file = '<?php'.
			"\r\n\$SITE = array (".
			"\r\n\t'site_name' => '".$SITE['site_name']."',".
			"\r\n\t'site_description' => '".$SITE['site_description']."',".
			"\r\n\t'site_keywords' => '".$SITE['site_keywords']."',".
			"\r\n\t'site_theme' => '".$SITE['site_theme']."',".
			"\r\n\t'site_main' => '".$SITE['site_main']."',".
			"\r\n\t'developer_email' => '".$SITE['site_email']."',".
			"\r\n\t'site_email' => '".$SITE['site_email']."',".
			"\r\n\t'site_comments' => '".$SITE['site_comments']."',".
			"\r\n\t'date_format' => '".$SITE['date_format']."',".
			"\r\n\t'user_name' => '".$SITE['user_name']."',".
			"\r\n\t'max_avatar' => '".$SITE['max_avatar']."',".
			"\r\n\t'cookie_live' => '".$SITE['cookie_live']."',".
			"\r\n\t'use_editor' => '".$SITE['use_editor']."',".
			"\r\n\t'allow_comments_guests' => '".$SITE['allow_comments_guests']."',".
			"\r\n)".
			"\r\n?>";
		
$setting_file = fopen ($_SERVER['DOCUMENT_ROOT'].'/engine/site_settings.php', 'w');
fwrite ($setting_file, $file);
fclose ($setting_file);

if (mysql_query ("DROP TABLE site_main"))
	$message[] = 'Настойки сайта обновлены';
	
	
/**
  * Создаем рабочий стол администратора
  */

$ADMIN = "CREATE TABLE expl_admin_cp (
	id INT (4) NOT NULL AUTO_INCREMENT,
	`group` ENUM ('modules', 'system', 'utilities') NOT NULL DEFAULT 'modules',
	href VARCHAR (32),
	name VARCHAR (32),
	image VARCHAR (64),
	PRIMARY KEY (id)
	) TYPE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO expl_admin_cp VALUES (0, 'modules',   'admin.php?name=articles',    'Статьи',      'images/admin/articles.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'modules',   'admin.php?name=users',       'Пользователи',         'images/admin/users.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'modules',   'admin.php?do=start_page',    'Главная страница',    'images/admin/homepage.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=settings',      'Настройки сайта', 'images/admin/settings.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=modules',       'Модули',       'images/admin/modules.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=blocks',        'Блоки',        'images/admin/blocks.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=menu',          'Меню',          'images/admin/menu.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=panels',        'Панели',        'images/admin/panels.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=feedback',      'Форма обратной связи', 'images/admin/feedback.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=plugins',       'Плагины',       'images/admin/plugins.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'system',    'admin.php?do=show_errorlog', 'Журнал ошибок',    'images/admin/error.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'utilities', 'admin.php?do=black_list',    'Черный список',    'images/admin/ipban.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'utilities', 'admin.php?do=mailer',        'Рассылка',        'images/admin/mail.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'utilities', 'admin.php?do=mysql',         'Запрос к БД',   'images/admin/db.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'utilities', 'admin.php?do=update',        'Обновление',   'images/admin/update.jpg');
INSERT INTO expl_admin_cp VALUES (0, 'utilities', 'admin.php?do=logs',          'Логи авторизаций',          'images/admin/logs.jpg')";


$ADMIN = explode (";", $ADMIN);

foreach ($ADMIN as $query) {
	mysql_query ($query);
}

umask (0000);
chmod ($_SERVER['DOCUMENT_ROOT'].'/installer', 0777);
$file = fopen ('block.install', 'w+');
fclose ($file);

print 'Обновление завершено!
<ul>';

foreach ($message as $s) {
	print '<li>'.$s.'</li>';
}
print '</ul>
<p><strong>Внимание!</strong> Текущая директория (<em>installer</em>) заблокирована. Это сделано в целях безопасности. Для разблокировки удалите файл <em>installer/block.install</em> .</p>';

include 'footer.php';

